class 是用來定義一個物件型態的工具,像是 int、str 一樣,但更靈活,因為你可以完全自定義屬性(資料)和方法(行為)。這使得 class 成為實現面向物件程式設計 (Object-Oriented Programming, OOP) 的基石。
更多有關於class文章:
Python 類別 class
方法解析順序 (MRO, Method Resolution Order)
Python 裝飾器 (decorator): @staticmethod
@classmethod 是 Python 中的一個裝飾器 (decorator),
用來定義類別方法 (class method)。
與一般的實例方法不同,類別方法是直接與類別本身相關聯的,而不是物件實例。
語法
class MyClass:
@classmethod
def class_method(cls, arg1, arg2):
# cls 指向類別
pass
class Dog:
species = "Canine" # 類別屬性
@classmethod
def get_species(cls):
return cls.species # 訪問類別屬性
# 類別本身調用
print(Dog.get_species()) # Canine
# 物件實例調用
buddy = Dog()
print(buddy.get_species()) # Canine
類別方法常用於創建物件的工廠方法,用來基於不同的輸入創建物件。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_birth_year(cls, name, birth_year):
# 根據出生年份計算年齡並創建物件
age = 2024 - birth_year
return cls(name, age) # 使用 cls 創建物件
# 使用普通初始化
p1 = Person("Alice", 30)
print(p1.name, p1.age) # Alice 30
# 使用類別方法初始化
p2 = Person.from_birth_year("Bob", 1995)
print(p2.name, p2.age) # Bob 29
@staticmethod 是另一個裝飾器,用來定義靜態方法(不需要 self 或 cls)。
裝飾器 使用場景 是否需要 self 或 cls
@classmethod 操作類別屬性,創建工廠方法 需要 cls(代表類別)
@staticmethod 狀態獨立的工具函數 不需要 self 或 cls
範例對比:
class Example:
counter = 0 # 類別屬性
@classmethod
def increment(cls):
cls.counter += 1 # 操作類別屬性
return cls.counter
@staticmethod
def greet():
return "Hello!"
print(Example.increment()) # 1
print(Example.greet()) # Hello!
更多有關於class文章:
Python 裝飾器 (decorator): @staticmethod